/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnfReporteEstadoUbicaciones.java
 *
 * Created on 19/10/2011, 11:51:13 PM
 */

package visual.Almacenamiento;

import bentity.*;
import blogic.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.image.BufferStrategy;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import visual.Seguridad.visualHelper;

/**
 *
 * @author chokewanka
 */
public class pnfReporteEstadoUbicaciones extends javax.swing.JPanel {
    private static final int TAM_UNIT = 10;
            private int racksXCol = 0;
	    private int racksXFila = 0;
	    private int tamRack = 0;
            private boolean esPrimeraVez=false;
            private boolean pintaUbi=false;
            private boolean clickUbi=false;
            private int pisos=0;
            private int rackclick=0;
            private int pisoActual=0;

            private boolean clic = false;
            private Point puntoCentrado= new Point();

	    private Point ubic = new Point(-1,-1);
            private int idub= -1;
            private ArrayList<Point> secs= new ArrayList<Point>();
            ArrayList<beUbicacion> ubicaciones = new ArrayList<beUbicacion>();
            private ArrayList<String> estadosXY= new ArrayList<String>();
	    private ArrayList racks_escogidos = new ArrayList<Point>();
            private ArrayList<beRack> racks=new ArrayList<beRack>();
            private ArrayList<beUbicacion> ubicsDisponibles=new ArrayList<beUbicacion>(); //Ubicaciones no bloqueadas ni llenas
            private ArrayList<beUbicacion> ubicsBloqueadas=new ArrayList<beUbicacion>(); //Ubicaciones bloqueadas
            private beUbicacion ubicSeleccionada= null; //Ubicacion seleccionada con un clic
	    private char[][] matriz;
            //private boolean eligio_entrada=false;
            private BufferStrategy bfs=null;
            private ArrayList entradas=new ArrayList<beEntrada>();
            private beAlmacen alma=new beAlmacen();


            private beCoordenada ubBloq= new beCoordenada();
            private String estBloq= "";
            private Dimension dimvent;

    
    public pnfReporteEstadoUbicaciones() {
        super();
        initComponents();
        blAlmacen bla= new blAlmacen();
        blHelper blh =new blHelper();
        blRack blr= new blRack();
        try {
            alma=blh.obtenerDatosAlmacen();
            if (alma.getNombre()!=null){
                entradas = bla.buscarObjsEntrada();
                this.ubicsDisponibles=(new blUbicacion().dameTodasLasUbicacionesDisponibles());
                this.ubicsBloqueadas=(new blUbicacion().dameTodasLasUbicacionesBloqueadas());
                llenarComboPiso();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error durante el procesamiento");
        }

        try {
                racks = blr.obtenerRacksConSecs();
            } catch (SQLException ex) {
                ex.printStackTrace();
                visualHelper.mostrarMensajeError("Ocurrió un error durante el proceso");
            }
        
        int numCol = 0;
        int numFil = 0;
        
        puntoCentrado=visualHelper.centrarDibujo(this.getPreferredSize(), blh.calcularNumeroColumnas(racksXFila, tamRack),blh.calcularNumeroFilas(racksXCol) , TAM_UNIT);
        
        if (alma.getNombre()!=null){
            racksXCol=alma.getFilas();
            racksXFila=alma.getRacksXFila();
            tamRack=alma.getUbsxrack();
            numCol = (new blHelper().calcularNumeroColumnas(racksXFila, tamRack));
            numFil = (new blHelper().calcularNumeroFilas(racksXCol));
            char[][]mataux =new blHelper().llenarMatrizEntradas(entradas, numCol, numFil, tamRack);

    //        blUbicacion bu = new blUbicacion();
    //        try {
    //            ubicaciones = bu.getTodasUbicaciones();
    //        } catch (SQLException ex) {
    //            visualHelper.mostrarMensajeError("Ocurrió un error durante el proceso");
    //        }

            //matriz=visualHelper.llenarMatrizConEstadosUbicaciones(mataux,true,ubicaciones);
//
//            pnlEstadosUbicacion.setLocation(puntoCentrado.x-162,puntoCentrado.y+(blh.calcularNumeroFilas(racksXCol)*10)+100);
//            pnlEstadosUbicacion.setVisible(true);
            this.repaint();
            }
    }

    private void llenarComboPiso() throws Exception{
        int maxPiso=0;
        blHelper blh= new blHelper();
        beCoordenada c=new beCoordenada();



        maxPiso= new blRack().obtenerRack(1).getCantPiso();
        if(maxPiso>0){
            ArrayList<beCombo> comboPiso = new ArrayList<beCombo>();
            beCombo cmb = new beCombo();
            for (int i = 0; i < maxPiso; i++) {
                cmb = new beCombo();
                cmb.setId_dato(i);
                cmb.setNom_dato(String.valueOf(i+1));
                cmb.setNom_combo("PISORK");
                comboPiso.add(cmb);
            }
            DefaultComboBoxModel mod =blh.ComboBoxItem(comboPiso);
            this.cbxPiso.setModel(mod);
            this.pisoActual=1;
        }
    }

    private ArrayList<beUbicacion> extraerUbicsDeUnPiso(ArrayList<beUbicacion> arr,int p){
        ArrayList<beUbicacion> arr2=new ArrayList<beUbicacion>();
        beCoordenada c=new beCoordenada();

        if((p<=0) || (p>this.cbxPiso.getItemCount())) return null;
        if(arr==null) return null;

        for(int i=0;i<arr.size();i++){
            c=arr.get(i).getCoordenadas();
            if(c.getPiso()==p) arr2.add(arr.get(i));
        }

        return arr2;

    }

    private beUbicacion esCoordUbicacion(int x,int y){
        beCoordenada coord=null;
        for(int i=0;i<this.ubicsDisponibles.size();i++){
            coord=this.ubicsDisponibles.get(i).getCoordenadas();
            if(coord.getxEnMapa()==x && coord.getyEnMapa()==y){
                return this.ubicsDisponibles.get(i);
            }
        }

        for(int i=0;i<this.ubicsBloqueadas.size();i++){
            coord=this.ubicsBloqueadas.get(i).getCoordenadas();
            if(coord.getxEnMapa()==x && coord.getyEnMapa()==y){
                return this.ubicsBloqueadas.get(i);
            }
        }
        return null;


    }

    @Override
	    public void paint(Graphics g){
                ArrayList<beUbicacion> arrAux=null;
                if (!this.esPrimeraVez){
                    this.esPrimeraVez=true;
                    //this.createBufferStrategy(2);
                    //bfs =this.getBufferStrategy();
                }
                super.paint(g);
                visualHelper.pintarAlmacen(g, alma.getFilas(), alma.getRacksXFila(), alma.getUbsxrack(), TAM_UNIT,this.getSize());
                visualHelper.pintarEntradas(g, entradas, alma.getFilas(), alma.getRacksXFila(), alma.getUbsxrack(), TAM_UNIT,this.getSize());

                if(this.ubicsDisponibles!=null)
                    visualHelper.pintarUbicacionesEspecificandoColor(g, racksXCol, racksXFila, tamRack, TAM_UNIT, this.getSize(), extraerUbicsDeUnPiso(this.ubicsDisponibles,pisoActual), Color.GREEN);
                if(this.ubicsBloqueadas!=null)
                    visualHelper.pintarUbicacionesEspecificandoColor(g, racksXCol, racksXFila, tamRack, TAM_UNIT, this.getSize(), extraerUbicsDeUnPiso(this.ubicsBloqueadas,pisoActual), Color.RED);

                visualHelper.pintarMalla(g, racksXCol, racksXFila, tamRack, TAM_UNIT,  this.getSize());
                visualHelper.pintarRotulosPasillosRacksFilas(g, racksXCol, racksXFila, tamRack, TAM_UNIT, this.getSize());
	    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        cbxPiso = new javax.swing.JComboBox();
        lblPiso1 = new javax.swing.JLabel();
        pnlEstadosUbicacion = new javax.swing.JPanel();
        lblTipoPallet1 = new javax.swing.JLabel();
        lblNoDisponibles = new javax.swing.JLabel();
        lblUbicacionesLibres = new javax.swing.JLabel();
        lblUbicacionesIngresadas = new javax.swing.JLabel();
        pnlRojo = new javax.swing.JPanel();
        pnlVerde = new javax.swing.JPanel();
        pnlAzul = new javax.swing.JPanel();

        setPreferredSize(new java.awt.Dimension(810, 438));

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setText("Consulta de Estado de Ubicaciones");

        cbxPiso.setFont(new java.awt.Font("Dialog", 0, 12));
        cbxPiso.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cbxPiso.setSelectedItem(null);
        cbxPiso.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbxPisoActionPerformed(evt);
            }
        });

        lblPiso1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblPiso1.setForeground(new java.awt.Color(0, 0, 0));
        lblPiso1.setText("Piso");

        pnlEstadosUbicacion.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Leyenda", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14))); // NOI18N
        pnlEstadosUbicacion.setLayout(null);

        lblTipoPallet1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblTipoPallet1.setForeground(new java.awt.Color(0, 0, 0));
        lblTipoPallet1.setText("Pallet");
        pnlEstadosUbicacion.add(lblTipoPallet1);
        lblTipoPallet1.setBounds(340, 492, 80, 15);

        lblNoDisponibles.setFont(new java.awt.Font("Dialog", 0, 12));
        lblNoDisponibles.setForeground(new java.awt.Color(0, 0, 0));
        lblNoDisponibles.setText("Ubicaciones no disponibles");
        pnlEstadosUbicacion.add(lblNoDisponibles);
        lblNoDisponibles.setBounds(40, 10, 220, 30);

        lblUbicacionesLibres.setFont(new java.awt.Font("Dialog", 0, 12));
        lblUbicacionesLibres.setForeground(new java.awt.Color(0, 0, 0));
        lblUbicacionesLibres.setText("Ubicaciones libres");
        pnlEstadosUbicacion.add(lblUbicacionesLibres);
        lblUbicacionesLibres.setBounds(40, 30, 220, 30);

        lblUbicacionesIngresadas.setFont(new java.awt.Font("Dialog", 0, 12));
        lblUbicacionesIngresadas.setForeground(new java.awt.Color(0, 0, 0));
        lblUbicacionesIngresadas.setText("Ubicaciones bloqueadas");
        pnlEstadosUbicacion.add(lblUbicacionesIngresadas);
        lblUbicacionesIngresadas.setBounds(40, 50, 220, 30);

        pnlRojo.setBackground(java.awt.Color.red);
        pnlRojo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        pnlEstadosUbicacion.add(pnlRojo);
        pnlRojo.setBounds(20, 60, 12, 12);

        pnlVerde.setBackground(java.awt.Color.green);
        pnlVerde.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        pnlEstadosUbicacion.add(pnlVerde);
        pnlVerde.setBounds(20, 40, 12, 12);

        pnlAzul.setBackground(java.awt.Color.blue);
        pnlAzul.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        pnlEstadosUbicacion.add(pnlAzul);
        pnlAzul.setBounds(20, 20, 12, 12);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(234, 234, 234)
                .addComponent(lblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 640, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(179, 179, 179)
                .addComponent(pnlEstadosUbicacion, javax.swing.GroupLayout.PREFERRED_SIZE, 268, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 292, Short.MAX_VALUE)
                .addComponent(lblPiso1)
                .addGap(18, 18, 18)
                .addComponent(cbxPiso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(lblTitulo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(cbxPiso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblPiso1))
                    .addComponent(pnlEstadosUbicacion, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(274, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void cbxPisoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbxPisoActionPerformed
        this.pisoActual=this.cbxPiso.getSelectedIndex()+1;
        ubicSeleccionada=null;
        repaint();
}//GEN-LAST:event_cbxPisoActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox cbxPiso;
    private javax.swing.JLabel lblNoDisponibles;
    private javax.swing.JLabel lblPiso1;
    private javax.swing.JLabel lblTipoPallet1;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JLabel lblUbicacionesIngresadas;
    private javax.swing.JLabel lblUbicacionesLibres;
    private javax.swing.JPanel pnlAzul;
    private javax.swing.JPanel pnlEstadosUbicacion;
    private javax.swing.JPanel pnlRojo;
    private javax.swing.JPanel pnlVerde;
    // End of variables declaration//GEN-END:variables

}
